package com.powernode.shop.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.powernode.shop.constant.ProdTagConstant;
import com.powernode.shop.domain.ProdTag;
import com.powernode.shop.mapper.ProdTagMapper;
import com.powernode.shop.service.ProdTagService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;

import java.util.Date;
import java.util.List;

/**
* @author ZHAOZHENYU
* @since 2022/10/12
*/
@Service
@CacheConfig(cacheNames = "com.powernode.shop.service.impl.ProdTagServiceImpl")
public class ProdTagServiceImpl extends ServiceImpl<ProdTagMapper, ProdTag> implements ProdTagService{

    @Autowired
    private ProdTagMapper prodTagMapper;

    @Override
    public Page<ProdTag> loadProdTagPage(Page<ProdTag> page, ProdTag prodTag) {

        return prodTagMapper.selectPage(page, new LambdaQueryWrapper<ProdTag>()
                .eq(!ObjectUtils.isEmpty(prodTag),ProdTag::getStatus, prodTag.getStatus())
                .like(StringUtils.hasText(prodTag.getTitle()),ProdTag::getTitle,prodTag.getTitle())
                .orderByDesc(ProdTag::getSeq)
        );

    }

    /**
     * 重写save
     * @param prodTag
     * @return
     */
    @Override
    @CacheEvict(key = ProdTagConstant.PRO_TAG_LIST)
    public boolean save(ProdTag prodTag) {
        prodTag.setCreateTime(new Date());
        prodTag.setShopId(1L);
        prodTag.setUpdateTime(new Date());
        return prodTagMapper.insert(prodTag) > 0;
    }

    /**
     * 重写list
     * @return
     */
    @Override
    @Cacheable(key = ProdTagConstant.PRO_TAG_LIST)
    public List<ProdTag> list() {
        return prodTagMapper.selectList(new LambdaQueryWrapper<ProdTag>()
                .eq(ProdTag::getStatus, 1)
                .orderByDesc(ProdTag::getSeq));
    }
}
